import pandas as pd
# 读取文件
file_path = 'merge_data1.csv'
df = pd.read_csv(file_path)
# 筛选出包含'2023'的发货记录完成时间
df_filtered = df[df['发货记录完成时间'].str.contains('2023')]
# 提取指定的列
selected_columns = ['货品类型', '发货记录完成时间', '发货吨位', '客户名称', '货款','产品品牌','单价','销售员名称']
df_selected = df_filtered[selected_columns]
'''
print(df_selected)
'''
# 提取客户名称相同的所有信息
grouped_data = df_selected.groupby('客户名称')
# 创建一个空的DataFrame用于存储结果
extracted_data = pd.DataFrame()
# 遍历每个组并提取数据
for name, group in grouped_data:
    extracted_data = pd.concat([extracted_data, group])
# 将货品类型为0的改为水泥，为1的改为矿粉
extracted_data['货品类型'] = extracted_data['货品类型'].replace({0: '水泥', 1: '矿粉'})
print(extracted_data)
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 对每个客户名称进行分组，并计算每个客户的总货款
customer_total_payment = extracted_data.groupby('客户名称')['货款'].sum().reset_index()
# 提取前十名的客户名称
# 重新计算所有客户的总货款，并提取前十名
corrected_top_10_customers = df_selected.nlargest(10, '货款')
'''
print(corrected_top_10_customers)
'''
average_payment = customer_total_payment['货款'].mean()

# 筛选出高于平均值的客户
above_average_customers = customer_total_payment[customer_total_payment['货款'] > average_payment]
# 绘制前十名客户的条形图
sorted_above_average_customers = above_average_customers.sort_values(by='货款', ascending=False)
'''
# 绘制条形图
plt.figure(figsize=(15, 8))
plt.bar(sorted_above_average_customers['客户名称'], sorted_above_average_customers['货款'], color='darkorange')
plt.xlabel('客户名称', fontsize=14, labelpad=15)
plt.ylabel('总货款', fontsize=14, labelpad=15)
plt.title('高于平均货款的客户（按货款降序排列）', fontsize=16, pad=20)
plt.xticks(rotation=90)
plt.grid(axis='y')

# 显示图形
plt.tight_layout()
plt.show()
'''
# 根据客户名称分组，并计算每个客户的总发货吨位
customer_total_tonnage = extracted_data.groupby('客户名称')['发货吨位'].sum().reset_index()
# 计算所有客户总发货吨位的平均值
average_tonnage = customer_total_tonnage['发货吨位'].mean()

# 筛选出高于平均值的客户
above_average_tonnage_customers = customer_total_tonnage[customer_total_tonnage['发货吨位'] > average_tonnage]

sorted_above_average_tonnage_customers = above_average_tonnage_customers.sort_values(by='发货吨位', ascending=False)
'''
# 绘制条形图
plt.figure(figsize=(15, 8))
plt.bar(sorted_above_average_tonnage_customers['客户名称'], sorted_above_average_tonnage_customers['发货吨位'], color='darkmagenta')
plt.xlabel('客户名称', fontsize=14, labelpad=15)
plt.ylabel('总发货吨位', fontsize=14, labelpad=15)
plt.title('高于平均发货吨位的客户（按发货吨位降序排列）', fontsize=16, pad=20)
plt.xticks(rotation=90)
plt.grid(axis='y')

# 显示图形
plt.tight_layout()
plt.show()
'''

goods_type_0 = extracted_data[extracted_data['货品类型'] == '水泥']
goods_type_1 = extracted_data[extracted_data['货品类型'] == '矿粉']
grouped_goods_type_0_tonnage = goods_type_0.groupby('客户名称')['发货吨位'].sum().reset_index()
average_tonnage_0 = grouped_goods_type_0_tonnage['发货吨位'].mean()
# 筛选出高于平均值的客户
above_average_tonnage_0_customers = grouped_goods_type_0_tonnage[grouped_goods_type_0_tonnage['发货吨位'] > average_tonnage_0]

# 按发货吨位降序排列
sorted_above_average_tonnage_0_customers = above_average_tonnage_0_customers.sort_values(by='发货吨位', ascending=False)
'''
# 绘制条形图
plt.figure(figsize=(15, 8))
plt.bar(sorted_above_average_tonnage_0_customers['客户名称'], sorted_above_average_tonnage_0_customers['发货吨位'], color='darkblue')
plt.xlabel('客户名称', fontsize=14, labelpad=15)
plt.ylabel('总发货吨位', fontsize=14, labelpad=15)
plt.title('货品类型为0且高于平均发货吨位的客户（按发货吨位降序排列）', fontsize=16, pad=20)
plt.xticks(rotation=90)
plt.grid(axis='y')

# 显示图形
plt.tight_layout()
plt.show()
'''
# 根据客户名称分组，并计算货品类型为1的客户的总发货吨位
grouped_goods_type_1_tonnage = goods_type_1.groupby('客户名称')['发货吨位'].sum().reset_index()

# 计算货品类型为1的客户总发货吨位的平均值
average_tonnage_1 = grouped_goods_type_1_tonnage['发货吨位'].mean()

# 筛选出高于平均值的客户
above_average_tonnage_1_customers = grouped_goods_type_1_tonnage[grouped_goods_type_1_tonnage['发货吨位'] > average_tonnage_1]

# 按发货吨位降序排列
sorted_above_average_tonnage_1_customers = above_average_tonnage_1_customers.sort_values(by='发货吨位', ascending=False)
'''
# 绘制条形图
plt.figure(figsize=(15, 8))
plt.bar(sorted_above_average_tonnage_1_customers['客户名称'], sorted_above_average_tonnage_1_customers['发货吨位'], color='darkcyan')
plt.xlabel('客户名称', fontsize=14, labelpad=15)
plt.ylabel('总发货吨位', fontsize=14, labelpad=15)
plt.title('货品类型为1且高于平均发货吨位的客户（按发货吨位降序排列）', fontsize=16, pad=20)
plt.xticks(rotation=90)
plt.grid(axis='y')
# 显示图形
plt.tight_layout()
plt.show()
'''
# 计算货品类型为0的客户总货款的平均值
average_payment_0 = goods_type_0['货款'].mean()

# 筛选出货款高于平均值的客户
above_average_payment_0_customers = goods_type_0[goods_type_0['货款'] > average_payment_0]

# 根据客户名称分组，并计算每个客户的总货款
grouped_above_average_payment_0 = above_average_payment_0_customers.groupby('客户名称')['货款'].sum().reset_index()

# 按货款降序排列
sorted_grouped_above_average_payment_0 = grouped_above_average_payment_0.sort_values(by='货款', ascending=False)
'''
# 绘制条形图
plt.figure(figsize=(15, 8))
plt.bar(sorted_grouped_above_average_payment_0['客户名称'], sorted_grouped_above_average_payment_0['货款'], color='darkgoldenrod')
plt.xlabel('客户名称', fontsize=14, labelpad=15)
plt.ylabel('总货款', fontsize=14, labelpad=15)
plt.title('货品类型为0且高于平均货款的客户（按货款降序排列）', fontsize=16, pad=20)
plt.xticks(rotation=90)
plt.grid(axis='y')
# 显示图形
plt.tight_layout()
plt.show()
'''
average_payment_1 = goods_type_1['货款'].mean()

# 筛选出货款高于平均值的客户
above_average_payment_1_customers = goods_type_1[goods_type_1['货款'] > average_payment_1]

# 根据客户名称分组，并计算每个客户的总货款
grouped_above_average_payment_1 = above_average_payment_1_customers.groupby('客户名称')['货款'].sum().reset_index()

# 按货款降序排列
sorted_grouped_above_average_payment_1 = grouped_above_average_payment_1.sort_values(by='货款', ascending=False)
'''
# 绘制条形图
plt.figure(figsize=(15, 8))
plt.bar(sorted_grouped_above_average_payment_1['客户名称'], sorted_grouped_above_average_payment_1['货款'], color='darkgoldenrod')
plt.xlabel('客户名称', fontsize=14, labelpad=15)
plt.ylabel('总货款', fontsize=14, labelpad=15)
plt.title('货品类型为1且高于平均货款的客户（按货款降序排列）', fontsize=16, pad=20)
plt.xticks(rotation=90)
plt.grid(axis='y')
plt.tight_layout()
plt.show()
'''
df_cement_2023 = df_selected[df_selected['货品类型'] == 0]  # 水泥
df_slag_2023 = df_selected[df_selected['货品类型'] == 1]  # 矿粉

# 计算2023年每个月的水泥和矿粉的发货吨位总和
monthly_cement_tonnage_2023 = df_cement_2023.groupby('发货记录完成时间')['发货吨位'].sum()
monthly_slag_tonnage_2023 = df_slag_2023.groupby('发货记录完成时间')['发货吨位'].sum()
# 绘制水泥发货吨位的条形图
'''
plt.figure(figsize=(12, 6))
plt.bar(monthly_cement_tonnage_2023.index, monthly_cement_tonnage_2023.values, color='skyblue')
plt.xlabel('月份')
plt.ylabel('发货吨位')
plt.title('2023年每个月的水泥发货吨位')
plt.xticks(range(1, 13))
plt.grid(axis='y')
# 显示图形
plt.tight_layout()
plt.show()
plt.figure(figsize=(12, 6))
plt.bar(monthly_slag_tonnage_2023.index, monthly_slag_tonnage_2023.values, color='skyblue')
plt.xlabel('月份')
plt.ylabel('发货吨位')
plt.title('2023年每个月的矿粉发货吨位')
plt.xticks(range(1, 13))
plt.grid(axis='y')
# 显示图形
plt.tight_layout()
plt.show()
'''
cement_data = df_cement_2023[['货品类型', '单价', '产品品牌']]
'''
print(cement_data)
'''
df_cement_type_0 = df[df['货品类型'] == 0]
# 提取货品类型为0的数据，并分组计算相同产品品牌的单价平均值
grouped_cement_data = df_cement_type_0.groupby('产品品牌')['单价'].mean().reset_index()
# 显示结果
'''
print(grouped_cement_data)
'''
df_slag_type_1 = df[df['货品类型'] == 1]
# 提取货品类型为0的数据，并分组计算相同产品品牌的单价平均值
grouped_slag_data = df_slag_type_1.groupby('产品品牌')['单价'].mean().reset_index()
# 显示结果
'''
print(grouped_slag_data)
'''
# 筛选出2023年的水泥数据
df_cement_type_0_2023 = df_selected[df_selected['货品类型'] == 0]

# 分组计算2023年相同产品品牌的累加货款
total_payment_per_product_0_2023 = df_cement_type_0_2023.groupby('产品品牌')['货款'].sum().reset_index()
'''
# 绘制2023年货品类型为0的不同产品品牌的累加货款条形图
plt.figure(figsize=(12, 6))
plt.bar(total_payment_per_product_0_2023['产品品牌'], total_payment_per_product_0_2023['货款'], color='lightcoral')
plt.xlabel('产品品牌')
plt.ylabel('累加货款')
plt.title('2023年货品类型为0的不同产品品牌的累加货款')
plt.xticks(range(len(total_payment_per_product_0_2023['产品品牌'])))
plt.grid(axis='y')

# 显示图形
plt.tight_layout()
plt.show()
'''
# 筛选出2023年的矿粉数据
df_slag_type_1_2023 = df_selected[df_selected['货品类型'] == 1]

# 分组计算2023年相同产品品牌的累加货款
total_payment_per_product_1_2023 = df_slag_type_1_2023.groupby('产品品牌')['货款'].sum().reset_index()
'''
# 绘制2023年货品类型为1的不同产品品牌的累加货款条形图
plt.figure(figsize=(12, 6))
plt.bar(total_payment_per_product_1_2023['产品品牌'], total_payment_per_product_1_2023['货款'], color='mediumseagreen')
plt.xlabel('产品品牌')
plt.ylabel('累加货款')
plt.title('2023年货品类型为1的不同产品品牌的累加货款')
plt.xticks(range(len(total_payment_per_product_1_2023['产品品牌'])))
plt.grid(axis='y')

# 显示图形
plt.tight_layout()
plt.show()
'''
# 分组计算2023年相同产品品牌的累加发货吨位
total_tonnage_per_product_0_2023 = df_cement_type_0_2023.groupby('产品品牌')['发货吨位'].sum().reset_index()
total_tonnage_per_product_1_2023 = df_slag_type_1_2023.groupby('产品品牌')['发货吨位'].sum().reset_index()
'''
# 绘制2023年货品类型为0和1的不同产品品牌的累加发货吨位条形图
fig, ax = plt.subplots(2, 1, figsize=(12, 12))
# 货品类型为0的条形图
ax[0].bar(total_tonnage_per_product_0_2023['产品品牌'], total_tonnage_per_product_0_2023['发货吨位'], color='lightcoral')
ax[0].set_xlabel('产品品牌')
ax[0].set_ylabel('累加发货吨位')
ax[0].set_title('2023年货品类型为0的不同产品品牌的累加发货吨位')
ax[0].grid(axis='y')
# 货品类型为1的条形图
ax[1].bar(total_tonnage_per_product_1_2023['产品品牌'], total_tonnage_per_product_1_2023['发货吨位'], color='mediumseagreen')
ax[1].set_xlabel('产品品牌')
ax[1].set_ylabel('累加发货吨位')
ax[1].set_title('2023年货品类型为1的不同产品品牌的累加发货吨位')
ax[1].grid(axis='y')
# 显示图形
plt.tight_layout()
plt.show()
'''
total_payment_per_salesperson_2023 = df_selected.groupby('销售员名称')['货款'].sum().reset_index()
'''
print(total_payment_per_salesperson_2023)
'''

sorted_payment_per_salesperson_2023 = total_payment_per_salesperson_2023.sort_values(by='货款', ascending=False)
'''
# 绘制降序排列的2023年不同销售员的累加货款条形图
plt.figure(figsize=(15, 8))
plt.bar(sorted_payment_per_salesperson_2023['销售员名称'], sorted_payment_per_salesperson_2023['货款'], color='darkorange')
plt.xlabel('销售员名称')
plt.ylabel('累加货款')
plt.title('2023年不同销售员的累加货款（降序排列）')
plt.xticks(rotation=90)
plt.grid(axis='y')

# 显示图形
plt.tight_layout()
plt.show()
'''
total_du_per_salesperson_2023 = df_selected.groupby('销售员名称')['发货吨位'].sum().reset_index()
'''
print(total_du_per_salesperson_2023)
'''

sorted_du_per_salesperson_2023 = total_du_per_salesperson_2023.sort_values(by='发货吨位', ascending=False)
'''
# 绘制降序排列的2023年不同销售员的累加货款条形图
plt.figure(figsize=(15, 8))
plt.bar(sorted_du_per_salesperson_2023['销售员名称'], sorted_du_per_salesperson_2023['发货吨位'], color='darkorange')
plt.xlabel('销售员名称')
plt.ylabel('发货吨位')
plt.title('2023年不同销售员的发货吨位（降序排列）')
plt.xticks(rotation=90)
plt.grid(axis='y')

# 显示图形
plt.tight_layout()
plt.show()
'''
customer_total_hu = extracted_data.groupby('客户名称')['发货吨位'].sum().reset_index()
# 提取前十名的客户名称
# 重新计算所有客户的总货款，并提取前十名
corrected_top_10_customers2 = df_selected.nlargest(10, '发货吨位')
'''
print(corrected_top_10_customers)
'''
average_hu = customer_total_hu['发货吨位'].mean()

# 筛选出高于平均值的客户
above_average_customers2 = customer_total_hu[customer_total_hu['发货吨位'] > average_hu]
# 绘制前十名客户的条形图
sorted_above_average_customers2 = above_average_customers2.sort_values(by='发货吨位', ascending=False)
plt.figure(figsize=(15, 8))
plt.bar(sorted_above_average_customers2['客户名称'], sorted_above_average_customers2['发货吨位'], color='darkorange')
plt.xlabel('客户名称', fontsize=14, labelpad=15)
plt.ylabel('总发货吨位', fontsize=14, labelpad=15)
plt.title('高于平均货款的客户（按货款降序排列）', fontsize=16, pad=20)
plt.xticks(rotation=90)
plt.grid(axis='y')
# 显示图形
plt.tight_layout()
plt.show()